//============================================================================
// Copyright (C) 2009-2013 Brett R. Jones 
// All Rights Reserved
//
// You may redistribute and/or modify for non commercial and commercial uses 
// provided this copyright notice remains in place and is not modified
//
// This code is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// brettjones1900@gmail.com
// http://www.p2panarchy.com
//============================================================================
#include "RcSysSktMgrLib.h"


//============================================================================
//=== constructor ===//
RcSysRxPktAnnEvent::RcSysRxPktAnnEvent()
	: m_poPktAnn(0)
	, m_u32BigListFlags(0)
{
}
//=== constructor ===//
RcSysRxPktAnnEvent::RcSysRxPktAnnEvent( RcSysPktAnnounce * poPktAnn, U32 u32BigListFlags )
	: m_poPktAnn(0)
	, m_u32BigListFlags(u32BigListFlags)
{
	if( poPktAnn )
	{
		m_poPktAnn = (RcSysPktAnnounce *)poPktAnn->MakeCopy();
	}
}
//============================================================================
//=== destructor ===//
RcSysRxPktAnnEvent::~RcSysRxPktAnnEvent()
{
	if( m_poPktAnn )
	{
		delete m_poPktAnn;
	}
}
//============================================================================
//=== constructor ===//
RcSysRxPktAnnQue::RcSysRxPktAnnQue()
{
}
//============================================================================
//=== destructor ===//
RcSysRxPktAnnQue::~RcSysRxPktAnnQue()
{
	RcSysRxPktAnnEvent * poEvent;
	int iCnt = (int)m_aoRxPktAnnEvents.size();
	for( int i = 0; i < iCnt; i++ )
	{
		poEvent = m_aoRxPktAnnEvents[i];
		delete poEvent;
	}
	m_aoRxPktAnnEvents.clear();
}

//============================================================================
//=== methods ===//
//============================================================================
//============================================================================
//! add event to que
void RcSysRxPktAnnQue::AddRxPktAnnEvent( RcSysRxPktAnnEvent * poEvent )
{
	m_oRxPktAnnEventMutex.Lock();
	m_aoRxPktAnnEvents.push_back( poEvent );
	m_oRxPktAnnEventMutex.Unlock();
}
//============================================================================
//! remove event from que.. returns null if no events avalil
RcSysRxPktAnnEvent * RcSysRxPktAnnQue::RemoveRxPktAnnEvent(  void )
{
	RcSysRxPktAnnEvent* poEvent = NULL;
	if( m_aoRxPktAnnEvents.size() )
	{
		poEvent = m_aoRxPktAnnEvents[0];
		m_aoRxPktAnnEvents.erase( m_aoRxPktAnnEvents.begin());
		return poEvent;
	}
	return NULL;
};



